package com.qdlc.p2p.biz.service;

import com.qdlc.p2p.dal.common.model.jpa.PageDataList;
import com.qdlc.p2p.dal.dto.AccountCash;
import com.qdlc.p2p.dal.dto.Operator;
import com.qdlc.p2p.dal.model.AccountCashModel;

/**
 * 提现
 *
 * @author wuaj
 * @version 1.1.0.0
 * @since 2016年3月17日
 */
public interface AccountCashService {

    /**
     * 根据ID查询
     *
     * @param id
     * @return
     */
    AccountCash find(long id);

    /**
     * 保存
     *
     * @param accountCash
     */
    void save(AccountCash accountCash);

    /**
     * 取消提现 注意判断id与userId是否对应
     *
     * @param cash
     * @param operator
     */
    void doCancleCash(AccountCash cash, Operator operator);

    /**
     * 确认提现成功
     *
     * @param cash
     */
    void verifyCash(AccountCash cash, Operator operator);

    /**
     * 提现记录
     *
     * @param userId
     * @return
     */
    PageDataList<AccountCashModel> list(long userId, int startPage, AccountCashModel model);

    /**
     * 提现金额信息
     *
     * @param userId
     * @return
     */
    AccountCash getCashMessage(long userId);

    /**
     * 提现审核记录列表
     *
     * @param accountCashModel
     * @return
     */
    PageDataList<AccountCashModel> accountCashList(AccountCashModel accountCashModel);

    /**
     * 统计等待审核的体现总数
     *
     * @param status
     * @return
     */
    int count(int status);

    /**
     * 客服提现审核
     *
     * @param cash
     * @param operator
     */
    void kfVerifyCash(AccountCash cash, int status, Operator operator);

    /**
     * 财务提现审核
     *
     * @param cash
     * @param operator
     */
    void cwVerifyCash(AccountCash cash, Operator operator);

    /**
     * 更改提现状态
     */
    void updateWithdrawStatus(int interval, int status);

    /**
     * 投资人累计提现金额总和
     *
     * @return
     */
    double allCashMoney();

    /**
     * 获取申请中的提现次数
     *
     * @param userId
     * @return
     */
    int getApplyingCount(long userId);

    /**
     * 投资人累计提现金额总和
     * <p/>
     * <p/>
     * /**
     * 获取当日提现次数(不含提现失败)
     *
     * @param userId
     * @return
     */
    int getSingleDaytime(long userId);

    /**
     * 获取当日提现总额(不含提现失败)
     *
     * @param userId
     * @return
     */
    double getSingleDayAmount(long userId);

    /**
     * 获取本月已免提现手续费次数(不含提现失败)
     *
     * @param userId
     * @return
     */
    int getMonthFreeFeeTime(long userId);

    /**
     * 获取该用户提现待付手续费
     */
    double getWithdrawCashManageFeeByUserId(long userId);

    /**
     * 更改充值状态
     */
    void updateRechargeStatus(int interval, int status);

    /**
     * 根据时间获取提现总数
     * @param date
     */
    double getWithdrawAmountByDate(String date);
}
